package webServicesParser;

import org.xml.sax.*;
import org.xml.sax.helpers.DefaultHandler;
import java.util.*;

import model.social.*;
import model.librairie.*;

public class EditeurHandler extends DefaultHandler {

        private List<Editeur> root;
        private Editeur editeur;

        //flags nous indiquant a position du parseur
        private boolean inRoot, inEditeur, inNom;
        //buffer nous permettant de r�cup�rer les donn�es
        private StringBuffer buffer;

        // simple constructeur
        public EditeurHandler(){
            super();
        }
        //d�tection d'ouverture de balise
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{
            if(qName.equals("editeurs")){
            	System.out.println("editeurs debut");
                root = new LinkedList<Editeur>();
                inRoot = true;
            }else if(qName.equals("editeur")){
                editeur = new Editeur();
                System.out.println("editeur debut");
                try{
                    int id = Integer.parseInt(attributes.getValue("id"));
                    editeur.setId_editeur(id);
                }catch(Exception e){
                    throw new SAXException(e);
                }
                inEditeur = true;
            }else {
                buffer = new StringBuffer();
                if(qName.equals("nom")){
                    inNom = true;
                }else {
                    throw new SAXException("Balise "+qName+" inconnue.");
                }
            }
        }
        //d�tection fin de balise
        public void endElement(String uri, String localName, String qName)
                throws SAXException{
            if(qName.equals("editeurs")){
                inRoot = false;
            }else if(qName.equals("editeur")){
                root.add(editeur);
                editeur = null;
                inEditeur = false;
            }else if(qName.equals("nom")){
                editeur.setNom(""+buffer.toString());
                buffer = null;
                inNom = false;
            }else{
                throw new SAXException("Balise "+qName+" inconnue.");
            }         
        }
        //d�tection de caract�res
        public void characters(char[] ch,int start, int length)
                throws SAXException{
            String lecture = new String(ch,start,length);
            if(buffer != null) buffer.append(lecture);      
        }
        //d�but du parsing
        public void startDocument() throws SAXException {
            System.out.println("Debut du parsing editeur");
        }
        //fin du parsing
        public void endDocument() throws SAXException {
            System.out.println("Fin du parsing editeur");
           
            RecupObjet rec = new RecupObjet();
    		
    		for(Editeur editeur : root){
    			rec.setEditeur(editeur);
    		}
        }
        

        protected String message(SAXParseException e){
        	String message = "Message : "+e.getMessage()+"\n";
        	message += "Ligne "+e.getLineNumber()+", colonne "+e.getColumnNumber()+"\n";
        	message += "Public id : "+e.getPublicId()+"\n";
        	message += "System id : "+e.getSystemId();
        	return message;
        }
        protected void printSAXException(SAXParseException e){
        	System.out.println(message(e));
        	if(e.getException() != null){
        		e.getException().printStackTrace();
        	}
        }
        public void warning(SAXParseException exception) throws SAXException{
        	System.out.println("*** Warning ***");
        	printSAXException(exception);
        }
        public void error(SAXParseException exception) throws SAXException{
        	System.out.println("*** Erreur ***");
        	printSAXException(exception);
        }
        public void fatalError(SAXParseException exception) throws SAXException{
        	String message = "*** Erreur fatale ***\n";
        	message += message(exception);
        	SAXException se = new SAXException(message, exception);
        	throw se;
        }

       
    }

